﻿// Doc-Encode UTF8-BOM, Space(4), Unix(LF)
#include "himpp_v4.h"
#include "klbmem/klb_mem.h"
#include "hiobj.h"
#include "himpp_extension.h"
#include "klua/CKlua.hpp"

#include "hi_comm_sys.h"
#include "mpi_sys.h"


//////////////////////////////////////////////////////////////////////////\
// 导出函数

static int hisys_Init(lua_State* L)
{
    HI_S32 ret = HI_MPI_SYS_Init();

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

static int hisys_Exit(lua_State* L)
{
    HI_S32 ret = HI_MPI_SYS_Exit();

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}


static int hisys_SetConfig(lua_State* L)
{
    hiobj_t* ptr = lua_checkhiobj(L, 1, HIOBJ_mem1, "MPP_SYS_CONFIG_S");

    HI_S32 ret = HI_MPI_SYS_SetConfig((const MPP_SYS_CONFIG_S*)ptr->data);

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

static int hisys_GetConfig(lua_State* L)
{
    hiobj_t* ptr = new_hiobj_mem(L, HIOBJ_mem1, "MPP_SYS_CONFIG_S");

    HI_S32 ret = HI_MPI_SYS_GetConfig((MPP_SYS_CONFIG_S*)ptr->data);

    lua_pushinteger(L, ret);
    lua_pushhiobj_table(L, ptr);
    return 2;
}


static int hisys_Bind(lua_State* L)
{
    hiobj_t* ptr1 = lua_checkhiobj(L, 1, HIOBJ_mem1, "MPP_SYS_CONFIG_S");
    hiobj_t* ptr2 = lua_checkhiobj(L, 2, HIOBJ_mem2, "MPP_SYS_CONFIG_S");

    HI_S32 ret = HI_MPI_SYS_Bind((const MPP_CHN_S*)ptr1->data, (const MPP_CHN_S*)ptr2->data);

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

static int hisys_UnBind(lua_State* L)
{
    hiobj_t* ptr1 = lua_checkhiobj(L, 1, HIOBJ_mem1, "MPP_SYS_CONFIG_S");
    hiobj_t* ptr2 = lua_checkhiobj(L, 2, HIOBJ_mem2, "MPP_SYS_CONFIG_S");

    HI_S32 ret = HI_MPI_SYS_UnBind((const MPP_CHN_S*)ptr1->data, (const MPP_CHN_S*)ptr2->data);

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

static int hisys_GetVersion(lua_State* L)
{
    hiobj_t* ptr = new_hiobj_mem(L, HIOBJ_mem1, "MPP_VERSION_S");
    HI_S32 ret = HI_MPI_SYS_GetVersion((MPP_VERSION_S*)ptr->data);

    lua_pushinteger(L, ret);
    lua_pushhiobj_table(L, ptr);
    return 2;
}

static int hisys_GetChipId(lua_State* L)
{
    HI_U32 id = 0;
    HI_S32 ret = HI_MPI_SYS_GetChipId(&id);

    lua_pushinteger(L, ret);
    lua_pushinteger(L, id);
    return 2;
}

//////////////////////////////////////////////////////////////////////////
// 常量定义

static void hisys_define(lua_State* L)
{

}

//////////////////////////////////////////////////////////////////////////
// 库

KLB_API int luaopen_himpp_hisys(lua_State* L)
{
    static luaL_Reg lib[] =
    {
        { "Init",               hisys_Init },
        { "Exit",               hisys_Exit },

        { "SetConf",            hisys_SetConfig },
        { "GetConf",            hisys_GetConfig },

        { "Bind",               hisys_Bind },
        { "UnBind",             hisys_UnBind },

        { "GetVersion",         hisys_GetVersion },
        { "GetChipId",          hisys_GetChipId },

        { NULL,                 NULL }
    };

    // 创建导出库函数
    luaL_newlib(L, lib);

    // 常量
    hisys_define(L);

    return 1;
}
